| ..:: Menu ::.. | ..:: Procedury i funkcje ::.. | ..::Info i Reklamy::.. |
|
Strona Główna Kursy DELPHI Kursy C++ Linki Forum Download Seriale Humor Reklama O autorze |
Pierwszy napisany przez nas program składał się wyłącznie z jednej funkcji main(). W
praktyce takie sytuacje w ogóle się nie zdarzają, a kod aplikacji zawiera najczęściej
bardzo wiele procedur i funkcji. Poznamy zatem dogłębnie istotę tych konstrukcji, by móc
pisać prawdziwe programy. W praktyce (i w języku C++) różnica między procedurą a funkcją jest dosyć subtelna, dlatego często obie te konstrukcje nazywa się dla uproszczenia funkcjami. A ponieważ lubimy wszelką prostotę, też będziemy tak czynić :) Własne funcjeNa początek dokonamy prostej modyfikacji programu napisanego wcześniej. Jego kod będzie teraz wyglądał tak: Po kompilacji i uruchomieniu programu nie widać większych zmian – nadal pokazuje on komunikat w oknie konsoli (oczywiście o innej treści, ale to raczej średnio ważne :)). Jednak wyraźnie widać, że kod uległ poważnym zmianom. Na czym one polegają? Otóż wydzieliliśmy fragment odpowiedzialny za wypisywanie tekstu do osobnej funkcji o nazwie PokazTekst(). Jest ona teraz wywoływana przez naszą główną funkcję, main(). Zmianie uległ więc sposób działania programu – rozpoczyna się od funkcji main(), ale od razu „przeskakuje” do PokazTekst(). Po jej zakończeniu ponownie wykonywana jest funkcja main(), która z kolei wywołuje funkcję getch(). Czeka ona na wciśnięcie dowolnego klawisza i gdy to nastąpi, wraca do main(), której jedynym zadaniem jest teraz zakończenie programu.Tryb śledzeniaPrzekonajmy się, czy to faktycznie prawda! W tym celu uruchomimy nasz program w specjalnym trybie krokowym. Aby to uczynić wystarczy wybrać z menu opcję Debug|Step Into lub Debug|Step Over, ewentualnie wcisnąć F11 lub F10. Zamiast konsoli z wypisanym komunikatem widzimy nadal okno kodu z żółtą strzałką, wskazującą nawias otwierający funkcję main(). Jest to aktualny punkt wykonania (ang. execution point) programu, czyli bieżąco wykonywana instrukcja kodu – tutaj początek funkcji main().Wciśnięcie F10 lub F11 spowoduje „wejście” w ową funkcję i sprawi, że strzałka spocznie teraz na linijce Jest to wywołanie naszej własnej funkcji PokazTekst(). Chcemy dokładnie prześledzić jej przebieg, dlatego wciśniemy F11 (lub skorzystamy z menu Debug|Step Into), by skierować się do jej wnętrza. Użycie klawisza F10 (albo Debug|Step Over) spowodowałoby ominięcie owej funkcji i przejście od razu do następnej linijki w main(). Oczywiście mija się to z naszym zamysłem i dlatego skorzystamy z F11. Punkt wykonania osiadł obecnie na początku funkcji PokazTekst(), więc korzystając z któregoś z dwóch używanych ostatnio klawiszy możemy umieścić go w jej kodzie. Dokładniej, w pierwszej linijce Jak wiemy, wypisuje ona tekst do okna konsoli. W tym momencie użyj Alt+Tab lub jakiegoś innego windowsowego sposobu, by przełączyć się do niego. Przekonasz się (czarno na czarnym ;)), iż jest całkowicie puste. Wróć więc do okna kodu, wciśnij F10/F11 i ponownie spójrz na konsolę. Zobaczysz naocznie, iż std::cout faktycznie wypisuje nam to, co chcemy :D Po kolejnych dwóch uderzeniach w jeden z klawiszy powrócimy do funkcji main(), a strzałka zwana punktem wykonania ustawi się na Moglibyśmy teraz użyć F11 i zobaczyć kod źródłowy funkcji getch(), ale to ma raczej niewielki sens. Poza tym, darowanemu koniowi (jakim są z pewnościa tego rodzaju funkcje!) nie patrzy się w zęby :) Posłużymy się przeto klawiszem F10 i pozwolimy funkcji wykonać się bez przeszkód. Zaraz zaraz… Gdzie podziała się strzałka? Czyżby coś poszło nie tak?… Spokojnie, wszystko jest w jak najlepszym porządku. Pamiętamy, że funkcja getch() oczekuje na przyciśnięcie dowolnego klawisza, więc teraz wraz z nią czeka na to cała aplikacja. Aby nie przedłużać nadto wyczekiwania, przełącz się do okna konsoli i uczyń mu zadość :) I tak oto dotarliśmy do epilogu – punkt wykonania jest teraz na końcu funkcji main(). Tu kończy się kod napisany przez nas, na program składa się jednak także dodatkowy kod, dodany przez kompilator. Oszczędzimy go sobie i wciśnięciem F5 (tudzież Debug|Continue) pozwolimy przebiec po nim sprintem i w konsekwencji zakończyć program. Tą oto drogą zapoznaliśmy się z bardzo ważnym narzędziem pracy programisty, czyli trybem krokowym, pracą krokową lub trybem śledzenia10. Widzieliśmy, że pozwala on dokładnie przestudiować działanie programu od początku do końca, poprzez wszystkie jego instrukcje. Z tego powodu jest nieocenionym pomocnikiem przy szukaniu i usuwaniu błędów w kodzie. Przebieg programuKonkluzją naszej przygody z funkcjami i pracą krokową będzie diagram, obrazujący działanie programu od początku do końca:![]() Czarne linie ze strzałkami oznaczają wywoływanie i powrót z funkcji, zaś duże białe – ich wykonywanie. Program zaczyna się u z lewej strony schematu, a kończy po prawej; zauważmy też, że w obu tych miejscach wykonywaną funkcją jest main(). Prawdą jest zatem fakt, iż to ona jest główną częścią aplikacji konsolowej. Jeśli opis słowny nie był dla ciebie nie do końca zrozumiały, to ten schemat powinien wyjaśnić wszystkie wątpliwości :) <--- Wstecz | Dalej ---> |
Reklama To miejsce czeka na twoją reklame. Więcej informacji w dziale Reklama |